Comment créer des filtres
Quand un Export Planifié est défini dans la boîte Propriétés de l’exportation, il est possible de sélectionner un filtre qui transforme le format d’exportation des données standard XML en un autre format approprié pour livraison (par exemple CSV). Si un filtre n’est pas spécifié, les fichiers d’exportations contiennent les données EMu en XML (comme utilisé par la fonction de création de rapports d’EMu). Comme les formats de livraison finale peuvent varier, les Administrateurs du Système peuvent avoir besoin de créer des filtres localisés. Dans cette section, nous examinons comment ajouter un filtre à la fonction Exports Planifiés.
Les filtres, qui sont des programmes ou scripts, résident sous le répertoire etc/exports ou local/etc/exports sur le serveur EMu.
Ils peuvent être spécifiques à un module ou s'appliquer à tous les modules. Les filtres spécifiques à un module sont stockés dans un sous-répertoire portant le nom du module auquel ils s'appliquent. Par exemple, les filtres spécifiques au module Personnes / Organisations se trouvent sous etc/exports/eparties ou local/etc/exports/eparties.
Note: Lors de l'ajout de vos propres filtres sur le serveur d’EMu, ils devraient être placés sous local/etc/exports puisque etc/exports est réservé à l'usage des mises à jour EMu.
Le nom du fichier contenant le programme ou le script est l’intitulé affiché dans la liste déroulante Filtres lors de la spécification d'une nouvelle Exportation.
Lorsqu'une exportation est effectuée, l'exportation initiale des données est au format XML EMu. Les données sont placées dans un fichier temporaire sur le serveur EMu et transmises comme argument au filtre spécifié pour l’Export planifié. Le filtre ne reçoit qu'un seul argument, le nom du fichier contenant les données exportées.
Plusieurs variables d'environnement sont définies et disponibles pour le filtre quand il exécute :
Variable |
Description |
---|---|
EXPORTTITLE |
Le titre donné à l’Export planifié quand il a été créé. |
EXPORTIRN |
Le NEI (Numéro d'Enregistrement Interne) de l’enregistrement Planification des exports utilisé pour générer le fichier des données exportées. En utilisant EXPORTIRN il est possible de récupérer les détails à partir de l’enregistrement Planification des exports. |
EXPORTTABLE |
Le module à partir duquel les données ont été exportées. |
EXPORTSTARTDATE |
La valeur de #STARTDATE# utilisée par la procédure d’exportation. |
EXPORTENDDATE |
La valeur de #ENDDATE# utilisée par la procédure d’exportation. |
EXPORTRECORDCOUNT |
Le nombre d’enregistrements exportés. |
Si le filtre ne parvient pas à traiter les données exportées, tout message d'erreur doit être écrit dans STDERR et l’export doit se terminer par un statut de sortie non nul. Cela notifie EMu que le filtre a échoué et qu'un échec d'export est enregistré. Tout texte écrit dans STDERR est affiché dans la fenêtre Sortie Filtre pour un enregistrement des exports dans le module Exports.
Une fois que le filtre a traité les données d'export, il doit imprimer sur STDOUT une liste de tous les fichiers générés. Ces fichiers sont déplacés dans le répertoire logs/exports sur le serveur EMu. Les noms des fichiers sont affichés dans la table Fichiers exportés de l'enregistrement des Exports créé. Si le filtre a réussi, il doit renvoyer un statut de sortie nul.
Le filtre peut manipuler les données d'exportation de n’importe quelle façon requise. Il peut envoyer les données par courriel (via sendmail), les imprimer (via lpr or lp) ou même les envoyer à des machines distantes (via rsh ou ssh). Une copie des données exportées devrait toujours être jointe à l’enregistrement Export afin qu'elles puissent être examinées à une date ultérieure, si nécessaire.
Dans cet exemple nous convertissons les données exportées du format XML au format CSV (Comma Separated Values) et envoyons le(s) fichier(s) produit(s) par courriel à une adresse e-mail (csvexport@client.org) sur notre serveur de courrier électronique local. Le serveur de courrier électronique transférera alors le courriel aux récipients.
Nous pouvons utiliser texxmlodbc
pour convertir les fichiers d’exportation de XML à CSV. Le filtre est écrit en utilisant le langage de script perl puisqu’il fournit un bon paquet pour envoyer des messages électroniques à parties multiples.
Le filtre est :
#!/usr/bin/perl
use strict;
use warnings 'all';
use MIME::Lite;
#
# Tout d’abord nous convertissons le XML à CSV et
# sauvegardons la liste des fichiers générés.
#
if (! open(FILES, "texxmlodbc --output-encoding=iso-8859-1 '$ARGV[0]' |"))
{
print STDERR "Cannot execute texxmlodbc";
exit(1);
}
my @files = <FILES>;
close(FILES);
#
# Construire le message à envoyer.
#
my $body = <<END;
Les fichiers joints ont été générés par l’outil Export planifié d’EMu.
Les détails de l'export sont :
Title: $ENV{EXPORTTITLE}
Module: $ENV{EXPORTTABLE}
Start Date: $ENV{EXPORTSTARTDATE}
End Date: $ENV{EXPORTENDDATE}
END
#
# Créer un e-mail pour csvexport@client
.org
#
my $msg = MIME::Lite->new(
To => 'csvexport@client
.org',
Objet => 'Fichiers CSV Export planifié EMu',
Type => 'multipart/mixed'
);
#
# Ajoutez d'abord le texte de l'e-mail.
#
$msg->attach(
Type => 'TEXT',
Data => $body
);
#
# Ajouter chaque fichier.
#
foreach my $file (@files)
{
#
# Déterminer le type MIME du fichier et le joindre
#
chomp($file);
my $type = ($file =~ /\.ini$/i) ? 'TEXT' : 'text/csv';
$msg->attach(
Type => $type,
Path => $file,
Disposition => 'attachment'
);
}
#
# Envoyer le courriel.
#
if (! $msg->send())
{
print STDERR 'Impossible d’envoyer l’e-mail à csvexport@client
.org' ;
exit(1);
}
print STDERR 'Email envoyé à csvexport@client
.org avec succès' ;
#
# Sortie de la liste des fichiers pour l'enregistrement export.
#
print join("\n", @files);
exit(0);
Remarquer comment le filtre sort les noms des fichiers CSV à la fin pour qu'ils puissent être joints à l’enregistrement Export créé. Une fois ces fichiers joints, ils peuvent être vus à tout moment.